package com.sjq.common.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class DateFormatUtil {

	
	public static String  dateFormat(){
		Date date = new Date();
		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String formatDate = dateFormat.format(date);
	  return formatDate;
	}
	

	
	/**
	 * <p>转换日期字符串格式</p>
	 *
	 * <pre>
	 * 说明示例:<br/>
	 * 24小时制<br/>
	 * 输入日期(mouseDateStr)--->输出日期(outDateMode[yyyy-MM-dd HH:mm:ss])<br/>
	 * 17.2.2 14:02:01--->2017-02-02 14:02:01<br/>
	 * 17-2-2 10:02:01--->2017-02-02 10:02:01<br/>
	 * 17/2/2 10:02:01--->2017-02-02 10:02:01<br/>
	 * 2017.2.2 10:02:01--->2017-02-02 10:02:01<br/>
	 * 2017-2-2 10:02:01--->2017-02-02 10:02:01<br/>
	 * 2017/2/2 10:02:01--->2017-02-02 10:02:01<br/>
	 * 17年2月2日  10:02:01--->2017-02-02 10:02:01<br/>
	 * 2017年2月2日  10:02:01--->2017-02-02 10:02:01<br/>
	 * 2017.2.2--->2017-02-02 00:00:00<br/>
	 * 2017-2-2--->2017-02-02 00:00:00<br/>
	 * 2017/2/2--->2017-02-02 00:00:00<br/>
	 * 17.2.2--->2017-02-02 00:00:00<br/>
	 * 17-2-2--->2017-02-02 00:00:00<br/>
	 * 17/2/2--->2017-02-02 00:00:00<br/>
	 * 2017年2月2日--->2017-02-02 00:00:00<br/>
	 * 17年2月2日--->2017-02-02 00:00:00<br/>
	 * 2017--->2017-01-01 00:00:00<br/>
	 * 201702--->2017-02-01 00:00:00<br/>
	 * 20170202--->2017-02-02 00:00:00<br/>
	 * 170202121011--->2017-02-02 12:10:11<br/>
	 * 20170202121011--->2017-02-02 12:10:11<br/>
	 * </pre>
	 *
	 * @param mouseDateStr 需要转换的日期字符串
	 * @param outDateMode	输出的目标日期的格式
	 * @return	解析成功,返回符合outDateMode模式的日期字符串; 解析失败,返回null
	 */
	public static String attemptParseDate(String mouseDateStr,String outDateMode){
		String[][] modes = 
			{
				{"\\d{2}([.])\\d{1,2}\\1\\d{1,2}\\s+\\d{1,2}(:)\\d{1,2}\\2\\d{1,2}","yy.MM.dd HH:mm:ss"},	//17.1.1 10:02:01
				{"\\d{2}([\\-])\\d{1,2}\\1\\d{1,2}\\s+\\d{1,2}(:)\\d{1,2}\\2\\d{1,2}","yy-MM-dd HH:mm:ss"},	//17-1-1 10:02:01
				{"\\d{2}([/])\\d{1,2}\\1\\d{1,2}\\s+\\d{1,2}(:)\\d{1,2}\\2\\d{1,2}","yy/MM/dd HH:mm:ss"},	//17/1/1 10:02:01
				
				{"\\d{4}([.])\\d{1,2}\\1\\d{1,2}\\s+\\d{1,2}(:)\\d{1,2}\\2\\d{1,2}","yyyy.MM.dd HH:mm:ss"}, //2017.1.1 10:02:01
				{"\\d{4}([\\-])\\d{1,2}\\1\\d{1,2}\\s+\\d{1,2}(:)\\d{1,2}\\2\\d{1,2}","yyyy-MM-dd HH:mm:ss"}, //2017-1-1 10:02:01
				{"\\d{4}([/])\\d{1,2}\\1\\d{1,2}\\s+\\d{1,2}(:)\\d{1,2}\\2\\d{1,2}","yyyy/MM/dd HH:mm:ss"}, //2017/1/1 10:02:01
				
				{"\\d{2}年\\d{1,2}月\\d{1,2}日\\s+\\d{1,2}(:)\\d{1,2}\\1\\d{1,2}","yy年MM月dd日 HH:mm:ss"},			//17年1月1日  10:02:01
				{"\\d{4}年\\d{1,2}月\\d{1,2}日\\s+\\d{1,2}(:)\\d{1,2}\\1\\d{1,2}","yyyy年MM月dd日 HH:mm:ss"},			//2017年1月1日  10:02:01
				
				{"\\d{4}([.])\\d{1,2}\\1\\d{1,2}","yyyy.MM.dd"},									//2017.1.1
				{"\\d{4}([\\-])\\d{1,2}\\1\\d{1,2}","yyyy-MM-dd"},									//2017-1-1
				{"\\d{4}([/])\\d{1,2}\\1\\d{1,2}","yyyy/MM/dd"},									//2017/1/1
				
				{"\\d{2}([.])\\d{1,2}\\1\\d{1,2}","yy.MM.dd"},									//17.1.1
				{"\\d{2}([\\-])\\d{1,2}\\1\\d{1,2}","yy-MM-dd"},									//17-1-1
				{"\\d{2}([/])\\d{1,2}\\1\\d{1,2}","yy/MM/dd"},									//17/1/1
				
				{"\\d{4}年\\d{1,2}月\\d{1,2}日","yyyy年MM月dd日"},											//2017年1月1日
				{"\\d{2}年\\d{1,2}月\\d{1,2}日","yy年MM月dd日"},											//17年1月1日
				{"\\d{4}","yyyy"},																	//2017
				{"\\d{6}","yyyyMM"},																//201701
				{"\\d{8}","yyyyMMdd"},																//20170101
				{"\\d{12}","yyMMddHHmmss"},																//170101121011
				{"\\d{14}","yyyyMMddHHmmss"}																//20170101121011
				
		};
		
		ParsePosition pos = new ParsePosition(0);
		for(int i=0;i<modes.length;i++){
			boolean isMatch = mouseDateStr.matches(modes[i][0]);
			if(isMatch){
				SimpleDateFormat sdfIn = new SimpleDateFormat(modes[i][1]);
				Date tempDate = sdfIn.parse(mouseDateStr,pos);
				// ?todo? gaox 去掉 out.println
				System.out.println("modes["+i+"]==>"+Arrays.toString(modes[i]));
				System.out.println("mouseDateStr===>"+mouseDateStr);
				System.out.println("tempDate===>"+tempDate);
				if(tempDate != null){
					System.out.println(modes[i]);
					SimpleDateFormat sdfOut = new SimpleDateFormat(outDateMode);
					String outDateStr = sdfOut.format(tempDate);
					sdfOut = null;
					return outDateStr;
				}
				sdfIn = null;
			}
		}
		return null;
	}

	public static String formatDate(Object date, String dtFormat) {
		SimpleDateFormat sdf = new SimpleDateFormat(dtFormat);
		return sdf.format(date);
	}

	public static Date parse2Date(String strDate, String dtFormat) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat(dtFormat);
		return sdf.parse(strDate);
	}
	
	public static String getCurDate(String format){
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(date);
	}

	

}
